from django.contrib.auth.models import User
from django.db import models
from utils.modelsMinxin import ModelsSetMixin,DatetimeModelsMixin,IsDeleteModelsMixin

# Create your models here.

# 商品分类模型
class Classification(ModelsSetMixin):
    name = models.CharField(max_length=40, verbose_name="分类",unique=True)
    # 分类会有层级 设置关联自身
    parent = models.ForeignKey("self", on_delete=models.SET_NULL, null=True, blank=True)

    class Meta:
        db_table = "classification"

    def __str__(self):
        return self.name

# 商品详情表
class Commodity(ModelsSetMixin):
    STATUS_CHOICES = ((0, '未发布'),(1, '发布') )
    name = models.CharField(max_length=40, verbose_name='商品名')
    caption = models.CharField(max_length=140, verbose_name='副标题')
    brand = models.CharField(max_length=40, verbose_name='品牌', null=True, blank=True)
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单价')
    stock = models.IntegerField(verbose_name='库存')
    pack = models.TextField(verbose_name='包装信息', null=True, blank=True)
    serviceafter_sale = models.TextField(verbose_name='售后服务', null=True, blank=True)
    sales = models.IntegerField(verbose_name='销量', default=0)
    comments = models.IntegerField(default=0, verbose_name='评价数')
    status = models.IntegerField(default=0, verbose_name='状态', choices=STATUS_CHOICES)
    detail = models.TextField(verbose_name='详情', null=True, blank=True)
    # 一级分类  Commodity.classification1  classification1_set
    classification1 = models.ForeignKey(Classification, on_delete=models.PROTECT, verbose_name='一级分类',
                                        related_name='classification1_set')
    # 二级分类  Commodity.classification2   classification2_set
    classification2 = models.ForeignKey(Classification, on_delete=models.PROTECT, verbose_name='二级分类',
                                        related_name='classification2_set', null=True, blank=True)

    class Meta:
        db_table = 'commodity'


# 商品图片表
class CommodityImg(models.Model):
    src = models.TextField(verbose_name='图片地址')
    # 展示的首图
    priority = models.IntegerField(default=0, verbose_name='优先级')
    commodity = models.ForeignKey(Commodity, on_delete=models.CASCADE, verbose_name='商品')

    class Meta:
        db_table = 'commodityimg'


#购物车
class ShoppingCart(DatetimeModelsMixin):
    number = models.IntegerField(default=1, verbose_name='数量')
    commodity = models.ForeignKey(Commodity, on_delete=models.CASCADE, verbose_name='商品')
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='用户')

    class Meta:
        ordering = ['-update_time']
        db_table = 'shoppingcart'


# 订单表
class Order(DatetimeModelsMixin):
    PAY_METHOD_CHOICES = (
        (1, '支付宝'),
        (2, '货到付款')
    )
    STATUS_CHOICES = (
        (1, '待支付'),
        (2, '待发货'),
        (3, '待收货'),
        (4, '待评价'),
        (5, '已完成'),
        (6, '已取消'),
        (7, '申请退款'),
        (8, '退款成功')
    )
    order_id = models.CharField(max_length=64, primary_key=True, verbose_name='订单号')
    total_count = models.IntegerField(default=1, verbose_name='商品总数')
    total_amount = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='商品总金额')
    pay_method = models.IntegerField(verbose_name='支付方式', default=1, choices=PAY_METHOD_CHOICES)
    status = models.IntegerField(verbose_name='订单状态', default=1, choices=STATUS_CHOICES)

    address = models.TextField(verbose_name='收货地址')
    user = models.ForeignKey(User, on_delete=models.PROTECT, verbose_name='用户')

    class Meta:
        ordering = ['-create_time']
        db_table = 'order'


# 订单详情表
class OrderGoods(DatetimeModelsMixin):
    SCORE_CHOICES = (
        (0, '零星'),
        (1, '一星'),
        (2, '两星'),
        (3, '三星'),
        (4, '四星'),
        (5, '五星'),
    )
    # 这一件商品购买的数量
    number = models.IntegerField(default=1, verbose_name='商品数')
    price = models.DecimalField(max_digits=10, decimal_places=2, verbose_name='单价')
    comment = models.TextField(verbose_name='评价', null=True, blank=True)
    score = models.IntegerField(null=True, blank=True, verbose_name='评分', choices=SCORE_CHOICES)
    is_anonymous = models.BooleanField(default=False, verbose_name='匿名评价')

    order = models.ForeignKey(Order, on_delete=models.CASCADE, verbose_name='订单')
    commodity = models.ForeignKey(Commodity, on_delete=models.SET_NULL, null=True, blank=True, verbose_name='商品')

    class Meta:
        db_table = 'ordergoods'

#支付表
class Payment(DatetimeModelsMixin):
    trade_id = models.CharField(max_length=100, unique=True, verbose_name='支付交易号')
    order = models.ForeignKey(Order, on_delete=models.CASCADE, verbose_name='订单')

    class Meta:
        ordering = ['-create_time']
        db_table = 'payment'

